Redis Streams

Database Tutorials - রেডিস (Redis)
170
170

Redis Streams Redis 5.0 এ পরিচিত একটি নতুন ডেটা স্ট্রাকচার, যা একটি log-based ডেটা স্ট্রাকচার হিসেবে কাজ করে। এটি রিয়েল-টাইম ডেটা স্ট্রিমিং এবং মেসেজিং সিস্টেমে ব্যবহৃত হয় এবং কমপ্লেক্স ডেটা সিকোয়েন্স বা বার্তা প্রক্রিয়াকরণ করতে সক্ষম। Redis Streams-এর মাধ্যমে, ডেটা সহজেই গ্রুপে ভাগ করা যায় এবং প্রসেসিং করা যায়, যা pub/sub (Publish/Subscribe) এর তুলনায় আরও উন্নত এবং স্কেলেবল।

Redis Streams-এর ধারণা

Redis Streams হলো একটি log-structured ডেটা স্ট্রাকচার যা ডেটার ধারাবাহিক প্রবাহ (stream) সংরক্ষণ করে। এটি মেসেজের একটি সিরিজ সংরক্ষণ করে, এবং প্রতিটি মেসেজের সাথে একটি ইউনিক আইডেন্টিফায়ার (ID) অ্যাসোসিয়েট থাকে।

Redis Streams ব্যবহার করা হয়:

  • রিয়েল-টাইম ডেটা ফ্লো ম্যানেজ করতে,
  • লগিং এবং ইভেন্ট ডেটা প্রক্রিয়াকরণে,
  • মেসেজ ব্রোকারিং সিস্টেমে,
  • ওয়ার্কফ্লো ম্যানেজমেন্টে,
  • ডেটা ইন্টিগ্রেশন সিস্টেমে।

Redis Streams মূল বৈশিষ্ট্য

  1. Stream Structure: Redis Stream-এ প্রতিটি মেসেজ একটি ID দিয়ে চিহ্নিত হয়, যা সাধারণত একটি টাইমস্ট্যাম্প বা সিকোয়েন্স নম্বর হতে পারে। একটি Stream-এর মধ্যে বিভিন্ন মেসেজ রাখা হয়, এবং নতুন মেসেজটি শেষের দিকে যুক্ত হয়।
  2. Consumer Groups: Redis Streams-এর একটি শক্তিশালী বৈশিষ্ট্য হলো Consumer Groups। এটি একাধিক কনজিউমারকে একই Stream থেকে ডেটা প্রসেস করার সুযোগ দেয়। প্রতিটি কনজিউমার গ্রুপ মেসেজগুলোকে প্যারালালভাবে প্রসেস করে, এবং Redis নিশ্চিত করে যে প্রতিটি মেসেজ কমপক্ষে একবার প্রসেস করা হবে।
  3. Stream ID: প্রতিটি মেসেজের একটি ইউনিক আইডেন্টিফায়ার থাকে। সাধারণত এটি দুটি অংশে বিভক্ত থাকে:
    • টাইমস্ট্যাম্প
    • সিকোয়েন্স নম্বর
  4. Persistence: Redis Streams ডিফল্টভাবে পার্সিস্টেন্ট হয়, অর্থাৎ ডেটা Redis-এর ডাটাবেসে সেভ হয়ে যায় এবং Redis সার্ভার রিস্টার্ট হওয়ার পরও ডেটা অক্ষত থাকে।
  5. Efficient Range Queries: Redis Streams খুব দ্রুতভাবে বড় পরিমাণ ডেটার মধ্যে রেঞ্জ কুয়েরি করতে সক্ষম।

Redis Streams-এ মেসেজ প্রকাশ এবং গ্রুপ তৈরি

Redis Streams ব্যবহার করে একটি Stream তৈরি করতে, আপনি XADD কমান্ড ব্যবহার করতে পারেন। এই কমান্ডের মাধ্যমে আপনি নতুন মেসেজ স্ট্রিমে যোগ করতে পারবেন।

1. Stream এ মেসেজ যোগ করা (XADD)

XADD mystream * message "Hello Redis Streams"

এই কমান্ডের মাধ্যমে mystream নামে একটি স্ট্রিম তৈরি করা হবে এবং "Hello Redis Streams" মেসেজ স্ট্রিমে যোগ হবে। এখানে * হল টাইমস্ট্যাম্প এবং সিকোয়েন্স আইডি স্বয়ংক্রিয়ভাবে নির্ধারণ করার জন্য ব্যবহৃত।

2. Stream থেকে মেসেজ পড়া (XRANGE)

XRANGE mystream - +

এটি mystream স্ট্রিম থেকে সমস্ত মেসেজ পড়বে, যেখানে - এবং + মানে শুরু এবং শেষের মধ্যে সমস্ত মেসেজ।

3. Consumer Group তৈরি করা (XGROUP CREATE)

একাধিক কনজিউমার ব্যবহার করার জন্য একটি Consumer Group তৈরি করা যেতে পারে। উদাহরণস্বরূপ:

XGROUP CREATE mystream mygroup $ MKSTREAM

এটি mystream স্ট্রিমের জন্য mygroup নামে একটি কনজিউমার গ্রুপ তৈরি করবে। $ ব্যবহার করা হলে, এটি নতুন মেসেজের জন্য কনজিউমার গ্রুপের প্রথম মেসেজ শুরু করবে।

4. Consumer Group থেকে মেসেজ গ্রহণ করা (XREADGROUP)

XREADGROUP GROUP mygroup consumer1 BLOCK 0 STREAMS mystream >

এটি কনজিউমার গ্রুপ mygroup থেকে consumer1 নামে কনজিউমারকে মেসেজ পাঠাবে এবং পরবর্তী মেসেজ পর্যন্ত ব্লক করবে।

5. Consumer Group থেকে মেসেজ গ্রহণের পরে ACK (Acknowledge)

যত দ্রুত একটি কনজিউমার মেসেজটি গ্রহণ করে, তত দ্রুত তা ACK (Acknowledgement) করতে হবে, যাতে Redis বুঝতে পারে যে মেসেজটি প্রসেস করা হয়েছে এবং কনজিউমারের পরবর্তী মেসেজ প্রাপ্তি শুরু হতে পারে।

XACK mystream mygroup 1538686111523-0

এটি mygroup গ্রুপের জন্য mystream থেকে মেসেজ 1538686111523-0 সফলভাবে প্রসেস করার পর ACK করবে।


Redis Streams-এর সুবিধা

  1. Real-Time Data Processing: Redis Streams খুব দ্রুত এবং কার্যকরভাবে রিয়েল-টাইম ডেটা প্রসেস করতে সহায়তা করে, যেমন ইভেন্ট স্ট্রিমিং বা লগিং সিস্টেমে।
  2. Horizontal Scalability: Consumer Groups ব্যবহারের মাধ্যমে Redis Streams কার্যকরভাবে স্কেল করতে পারে। একাধিক কনজিউমার গ্রুপে বিভক্ত করা যায়, যার মাধ্যমে বিভিন্ন কনজিউমার একই Stream থেকে ডেটা প্রসেস করতে পারে, এবং প্রতিটি কনজিউমারের জন্য কাজটি ভারসামিত হয়ে থাকে।
  3. Persistence: Redis Streams পার্সিস্টেন্ট হয়, তাই ডেটা Redis সার্ভারে সেভ হয়ে থাকে এবং সিস্টেম রিস্টার্টের পরেও তা ফিরে পাওয়া যায়।
  4. Efficient Data Storage: Redis Streams খুব দ্রুত বড় পরিমাণ ডেটা স্টোর এবং রিটার্ন করতে সক্ষম।
  5. Message Acknowledgement: Redis Streams কনজিউমারের মেসেজ প্রসেস করার পর acknowledgement সিস্টেম প্রদান করে, যা নিশ্চিত করে যে মেসেজটি একাধিক কনজিউমারের মধ্যে ভাগাভাগি না হয়ে একবারই প্রসেস হবে।

Use Cases of Redis Streams

  1. Real-Time Analytics: বিভিন্ন সোর্স থেকে আসা ডেটা স্ট্রিম করে তা রিয়েল-টাইমে বিশ্লেষণ করা, যেমন ইভেন্ট ট্র্যাকিং, লগ অ্যানালিটিক্স।
  2. Task Queues: টাস্ক কিউ সিস্টেম তৈরি করা যেখানে বিভিন্ন কনজিউমার গ্রুপ একাধিক টাস্ক প্রসেস করতে পারে।
  3. Messaging System: একটি শক্তিশালী মেসেজ ব্রোকার তৈরি করা যেখানে প্যারালাল কনজিউমারদের মাধ্যমে একাধিক মেসেজ দ্রুত প্রসেস করা হয়।
  4. Data Synchronization: বিভিন্ন সিস্টেমে ডেটা সিঙ্ক্রোনাইজ করার জন্য, একাধিক সিস্টেমে Redis Streams ব্যবহার করা যেতে পারে।

Conclusion

Redis Streams একটি অত্যন্ত শক্তিশালী ডেটা স্ট্রাকচার যা ডেটা স্ট্রিমিং, মেসেজিং, এবং রিয়েল-টাইম ডেটা প্রসেসিংয়ের জন্য ব্যবহার করা হয়। এটি Consumer Groups, Message Acknowledgment, এবং Efficient Range Queries এর মাধ্যমে একটি শক্তিশালী এবং স্কেলেবল সিস্টেম গড়ে তোলে। Redis Streams বিভিন্ন বাস্তব সময়ের ব্যবহারে কাজে লাগানো যেতে পারে, যেমন ইভেন্ট ট্র্যাকিং, মেসেজ ব্রোকারিং, ডেটা সিঙ্ক্রোনাইজেশন ইত্যাদি।

Content added By

Redis Streams এর ধারণা

145
145

Redis Streams হল একটি ডেটা স্ট্রাকচার যা রেডিস 5.0 তে নতুন করে যোগ করা হয়েছে, এবং এটি মূলত log-like ডেটা সঞ্চয়ের জন্য ব্যবহৃত হয়। Redis Streams ডেটার স্ট্রিমিং এবং রিয়েল-টাইম ডেটা প্রসেসিংয়ের জন্য আদর্শ। এটি একাধিক প্রযোজ্য ক্ষেত্রে যেমন ইভেন্ট সোরসিং, মেসেজিং সিস্টেম, এবং কিউ ম্যানেজমেন্টে ব্যবহৃত হতে পারে।


Redis Streams মূলত একটি log-based data structure, যেখানে ডেটা টাইমস্ট্যাম্প এবং ইউনিক আইডি দিয়ে সংরক্ষিত থাকে, এবং এই ডেটা ক্রমাগতভাবে আপডেট ও অ্যাক্সেস করা যেতে পারে। এটি Pub/Sub মডেলের তুলনায় একটু বেশি উন্নত, কারণ এখানে একাধিক Consumers এবং Consumer Groups হতে পারে, যারা একাধিক Messages বা Events প্রক্রিয়া করতে পারে।

Redis Streams-এর মূল বৈশিষ্ট্য

  1. Log-Based Storage: Redis Streams ডেটাকে একটি লজ হিসেবে সংরক্ষণ করে, যা ডেটার একটি ক্রম তৈরি করে (যেমন টাইমস্ট্যাম্প + ইউনিক আইডি)। এটি ইভেন্ট লগিং, ট্রানজেকশন লগিং এবং এমনকি মেসেজ ট্র্যাকিংয়ের জন্য উপযুক্ত।
  2. Consumer Groups: Redis Streams এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল Consumer Groups। একাধিক কনজিউমার (বা কনজিউমার গ্রুপ) একই স্ট্রিম থেকে ডেটা কনজিউম করতে পারে, এবং Redis তাদের মধ্যে কাজ ভাগ করে দেয়, যাতে প্রতিটি কনজিউমার স্ট্রিম থেকে নির্দিষ্ট মেসেজগুলো প্রক্রিয়া করতে পারে।
  3. Message Acknowledgement: Redis Streams মেসেজ প্রসেস করার পর acknowledgment সিস্টেমের মাধ্যমে নিশ্চিত করে যে মেসেজটি সফলভাবে প্রক্রিয়া হয়েছে।
  4. Blocking and Non-Blocking Reads: Redis Streams ব্লকিং বা নন-ব্লকিং রিড অপারেশন সাপোর্ট করে, যা প্রোগ্রামারদের রিয়েল-টাইম ডেটা প্রসেসিং করার সুবিধা দেয়।
  5. Persistent: Redis Streams পার্সিস্টেন্ট ডেটা স্টোরেজ হিসেবে কাজ করে, কারণ এটি ডেটাকে AOF (Append-Only File) বা RDB (Redis Database) ব্যাকআপ সিস্টেমের মাধ্যমে সেভ করে রাখে।

Redis Streams-এর মূল কমান্ডগুলো

Redis Streams ব্যবহার করার জন্য কিছু গুরুত্বপূর্ণ কমান্ড রয়েছে। এখানে XADD, XREAD, XGROUP এবং XACK কমান্ডগুলোর ব্যবহার আলোচনা করা হচ্ছে।

1. XADD: নতুন মেসেজ স্ট্রিমে যোগ করা

XADD কমান্ডের মাধ্যমে একটি নতুন মেসেজ স্ট্রিমে যোগ করা হয়। এটি স্ট্রিমের শেষের দিকে নতুন মেসেজ যুক্ত করে।

XADD mystream * message "Hello, Redis Streams!"
  • mystream: স্ট্রিমের নাম।
  • *: টাইমস্ট্যাম্প এবং ইউনিক আইডি যুক্ত হবে, যা স্বয়ংক্রিয়ভাবে তৈরি হয়।
  • message: মেসেজ বা ডেটা।

এটি একটি নতুন মেসেজ স্ট্রিমে যোগ করবে এবং স্বয়ংক্রিয়ভাবে একটি স্ট্রিম আইডি তৈরি হবে।

2. XREAD: স্ট্রিম থেকে মেসেজ রিড করা

XREAD কমান্ড ব্যবহার করে স্ট্রিম থেকে মেসেজ পড়া হয়। এটি ব্লকিং বা নন-ব্লকিং রিড অপারেশন সাপোর্ট করে।

XREAD COUNT 2 BLOCK 0 STREAMS mystream $
  • COUNT 2: সর্বোচ্চ ২টি মেসেজ পড়বে।
  • BLOCK 0: ব্লকিং রিড (0 মানে ইনফিনিট ব্লক করবে যতক্ষণ না নতুন মেসেজ আসে)।
  • STREAMS mystream $: mystream স্ট্রিম থেকে রিড করা হবে এবং $ নির্দেশনা দিয়ে স্ট্রিমের সর্বশেষ মেসেজ থেকে রিড শুরু হবে।

3. XGROUP: Consumer Group তৈরি এবং পরিচালনা

Redis Streams-এ Consumer Group তৈরি করা হয়, যেখানে একাধিক কনজিউমার একই স্ট্রিম থেকে মেসেজ গ্রহণ করতে পারে। XGROUP কমান্ডের মাধ্যমে একটি কনজিউমার গ্রুপ তৈরি করা হয়।

XGROUP CREATE mystream mygroup $ MKSTREAM
  • mystream: স্ট্রিমের নাম।
  • mygroup: কনজিউমার গ্রুপের নাম।
  • $: কনজিউমার গ্রুপ নতুন মেসেজগুলি পড়বে।

4. XACK: মেসেজ অ্যাকনলেজ করা

একটি মেসেজ সফলভাবে কনজিউম করার পর, কনজিউমারদের acknowledge করা প্রয়োজন। এটি করার জন্য XACK কমান্ড ব্যবহার করা হয়।

XACK mystream mygroup 1526569495631-0
  • mystream: স্ট্রিমের নাম।
  • mygroup: কনজিউমার গ্রুপের নাম।
  • 1526569495631-0: স্ট্রিমের মেসেজ আইডি (যা XADD কমান্ডের মাধ্যমে সৃষ্টি হয়েছে)।

5. XTRIM: স্ট্রিম ট্রিম করা

XTRIM কমান্ড ব্যবহার করে স্ট্রিমের সাইজ সীমাবদ্ধ করা যায়। এটি স্ট্রিমের পুরনো মেসেজগুলো মুছে ফেলে।

XTRIM mystream MAXLEN 1000
  • MAXLEN 1000: স্ট্রিমে সর্বোচ্চ 1000 মেসেজ থাকতে দেবে, পুরনো মেসেজগুলো মুছে ফেলা হবে।

Redis Streams-এর ব্যবহার ক্ষেত্র

  1. Real-Time Data Processing: Redis Streams ইভেন্ট লগিং এবং রিয়েল-টাইম ডেটা প্রসেসিংয়ের জন্য উপযুক্ত। যেমন, ওয়েবসাইট ভিজিটর ট্র্যাকিং, চ্যাট সিস্টেম, লোগিং ইত্যাদি।
  2. Event Sourcing: অ্যাপ্লিকেশনের স্টেট পরিবর্তনের জন্য ইভেন্ট স্ট্রিম তৈরি করা হয়, যা পরবর্তীতে পুনরুদ্ধার বা প্রক্রিয়া করা যায়।
  3. Message Queuing: Redis Streams কে একটি মেসেজ কিউ হিসেবে ব্যবহার করে বিভিন্ন মেসেজ কনজিউমারদের মধ্যে ডেটা প্রসেস করা হয়।
  4. Analytics: রিয়েল-টাইম ডেটা অ্যাকিউমুলেট এবং প্রোসেস করার জন্য Redis Streams ব্যবহার করা যায়, যেমন, লগ ফাইল প্রসেসিং, ইউজার বিহেভিয়ার ট্র্যাকিং, ইত্যাদি।

সারাংশ

Redis Streams একটি শক্তিশালী ডেটা স্ট্রাকচার যা রিয়েল-টাইম ডেটা প্রসেসিং এবং মেসেজিং সিস্টেমে ব্যবহৃত হয়। এটি log-based স্টোরেজ পদ্ধতি ব্যবহার করে যেখানে প্রতিটি মেসেজ একটি টাইমস্ট্যাম্প এবং ইউনিক আইডি দ্বারা চিহ্নিত হয়। Redis Streams-এ Consumer Groups ব্যবহার করে একাধিক কনজিউমার একই ডেটা স্ট্রিম থেকে মেসেজ গ্রহণ করতে পারে। এটি Event Sourcing, Message Queuing, এবং Real-Time Data Processing এর মতো ক্ষেত্রে ব্যবহৃত হতে পারে।

Content added By

XADD, XREAD, এবং XGROUP কমান্ডের ব্যবহার

127
127

Redis Streams হল Redis-এর একটি ডেটা স্ট্রাকচার যা লজিক্যাল অর্ডারে ডেটা সংরক্ষণ এবং পরিচালনা করতে ব্যবহৃত হয়। এর মাধ্যমে রিয়েল-টাইম ডেটা স্ট্রিমিং, মেসেজ ব্রোকারিং এবং ইভেন্ট সোরিং সহজ হয়। Redis Streams-এর মধ্যে XADD, XREAD, এবং XGROUP হল তিনটি গুরুত্বপূর্ণ কমান্ড, যা স্ট্রিম ডেটা ম্যানিপুলেশন, পাঠানো এবং গ্রুপের মাধ্যমে স্ট্রিম রিড করতে ব্যবহৃত হয়।

এখানে প্রতিটি কমান্ডের বিস্তারিত ব্যাখ্যা দেওয়া হল:


1. XADD: Adding Data to a Stream

XADD কমান্ডটি Redis Streams-এ নতুন মেসেজ (এলিমেন্ট) যোগ করতে ব্যবহৃত হয়। স্ট্রিমে ডেটা যোগ করার সময়, একটি গাইডেড আইডেন্টিফায়ার (স্ট্রিম আইডি) স্বয়ংক্রিয়ভাবে তৈরি হয়, তবে আপনি চাইলে একটি কাস্টম আইডি ব্যবহার করতে পারেন।

XADD Syntax:

XADD <stream_name> <field1> <value1> <field2> <value2> ...
  • <stream_name>: স্ট্রিমের নাম।
  • <field1> <value1>: স্ট্রিমের ফিল্ড এবং তার মান।

উদাহরণ:

XADD mystream * name "John Doe" age 30

এখানে, mystream নামে একটি স্ট্রিমে দুটি ফিল্ড (name, age) যোগ করা হয়েছে। * স্ট্রিম আইডি হিসেবে একটি স্বয়ংক্রিয় টাইমস্ট্যাম্প ব্যবহার করে।

আউটপুট:

"1625077862030-0"

এটি স্ট্রিম আইডি, যা Redis দ্বারা তৈরি করা হয় এবং এটি স্ট্রিমের মধ্যে ডেটার লজিক্যাল অর্ডার বজায় রাখে।

Additional Options:

  • MAXLEN: একটি সীমা নির্ধারণ করা, যার মাধ্যমে স্ট্রিমে শুধুমাত্র সর্বাধিক নির্দিষ্ট সংখ্যা পর্যন্ত আইটেম রাখা হয় এবং পুরনো আইটেমগুলি অটোমেটিকালি মুছে যায়।

    XADD mystream MAXLEN 1000 * name "Alice" age 25
    

2. XREAD: Reading Data from a Stream

XREAD কমান্ডটি Redis Streams থেকে ডেটা রিড করতে ব্যবহৃত হয়। এটি আপনাকে একটি বা একাধিক স্ট্রিম থেকে ডেটা অ্যাক্সেস করতে দেয় এবং চূড়ান্ত ডেটা (ইভেন্ট) রিটার্ন করে।

XREAD Syntax:

XREAD BLOCK <milliseconds> STREAMS <stream1> <stream2> ... <count> <count>
  • BLOCK: এটি নির্দিষ্ট সময় (মিলিসেকেন্ডে) জন্য ব্লক করতে ব্যবহৃত হয়, যতক্ষণ না নতুন ডেটা না আসে।
  • STREAMS: যে স্ট্রিমগুলোর থেকে ডেটা রিড করতে চান।
  • <stream_name>: স্ট্রিমের নাম।
  • : প্রতি স্ট্রিমে কতটি মেসেজ পাঠাতে হবে।

উদাহরণ:

XREAD BLOCK 0 STREAMS mystream 0

এটি mystream থেকে সর্বশেষ ডেটা রিড করবে এবং যদি নতুন ডেটা না থাকে, তাহলে এটি ইনফিনিট সময়ের জন্য ব্লক করবে। 0 এখানে নির্দেশ করে যে, প্রথম থেকেই ডেটা রিড করতে হবে।

আউটপুট:

1) 1) "mystream"
   2) 1) "1625077862030-0"
      2) 1) "name"
         2) "John Doe"
      3) 1) "age"
         2) "30"

এখানে, mystream থেকে ডেটা রিড করা হয়েছে এবং প্রত্যেকটি ইভেন্টের সাথে তার স্ট্রিম আইডি, ফিল্ড এবং মান দেখানো হয়েছে।


3. XGROUP: Creating and Managing Consumer Groups

XGROUP কমান্ডটি Redis Streams-এ Consumer Group তৈরি এবং পরিচালনা করতে ব্যবহৃত হয়। Consumer Groups Redis Streams-এর একটি শক্তিশালী বৈশিষ্ট্য, যা একাধিক কনজিউমার (গ্রাহক) বা কনজিউমার গ্রুপের মাধ্যমে ডেটা প্রক্রিয়া করার সুবিধা দেয়।

XGROUP Syntax:

XGROUP CREATE <stream_name> <group_name> <ID>
  • <stream_name>: স্ট্রিমের নাম।
  • <group_name>: কনজিউমার গ্রুপের নাম।
  • : স্ট্রিমের যেখানে থেকে কনজিউমার গ্রুপটি শুরু করবে, এটি সাধারণত "0" থাকে, যা প্রথম থেকে রিড করা শুরু করবে।

উদাহরণ:

XGROUP CREATE mystream mygroup 0

এটি mystream নামক স্ট্রিমে mygroup নামে একটি কনজিউমার গ্রুপ তৈরি করবে এবং প্রথম থেকে ডেটা রিড করবে। গ্রুপের উদ্দেশ্য হল একাধিক কনজিউমারের মধ্যে ডেটা ভাগ করে দেওয়া।

Reading Data from a Consumer Group (XREADGROUP)

একবার কনজিউমার গ্রুপ তৈরি হলে, আপনি গ্রুপের মাধ্যমে ডেটা রিড করতে পারেন XREADGROUP কমান্ড ব্যবহার করে। এটি একটি নির্দিষ্ট গ্রুপের সদস্যদের জন্য ডেটা পাঠায়।

XREADGROUP GROUP mygroup consumer1 BLOCK 0 STREAMS mystream >

এখানে, consumer1 হল গ্রুপের সদস্য, যা ডেটা রিড করবে। BLOCK 0 নির্দেশ করে যে, এটি চিরকাল ব্লক করবে যতক্ষণ না নতুন ডেটা আসে, এবং > নির্দেশ করে যে, এটি শুধুমাত্র নতুন ডেটা রিড করবে।

আউটপুট:

1) 1) "mystream"
   2) 1) "1625077862030-0"
      2) 1) "name"
         2) "Alice"
      3) 1) "age"
         2) "25"

Summary of Commands

  1. XADD: নতুন ডেটা (ইভেন্ট) স্ট্রিমে যোগ করতে।
    • XADD mystream * name "John" age 25
  2. XREAD: স্ট্রিম থেকে ডেটা রিড করতে।
    • XREAD BLOCK 0 STREAMS mystream 0
  3. XGROUP: কনজিউমার গ্রুপ তৈরি করতে।
    • XGROUP CREATE mystream mygroup 0
  4. XREADGROUP: কনজিউমার গ্রুপ থেকে ডেটা রিড করতে।
    • XREADGROUP GROUP mygroup consumer1 BLOCK 0 STREAMS mystream >

Use Cases

  1. Real-time Event Processing: স্ট্রিমগুলো ব্যবহার করে ইভেন্ট সিস্টেমে নতুন ডেটা সংগ্রহ করা এবং সেই ডেটা রিয়েল-টাইমে প্রসেস করা।
  2. Messaging Systems: Redis Streams Pub/Sub সিস্টেম হিসেবে কাজ করতে পারে যেখানে একাধিক কনজিউমার গ্রুপ মেসেজ গ্রহণ করতে পারে।
  3. Queue Systems: স্ট্রিম কনজিউমার গ্রুপের মাধ্যমে একাধিক কনজিউমার টাস্কগুলি ভাগ করে নিতে পারে, যেমন কাজের কিউ সিস্টেমে।

Redis Streams একটি শক্তিশালী ডেটা স্ট্রাকচার যা রিয়েল-টাইম ডেটা প্রক্রিয়াকরণ এবং স্কেলেবেল মেসেজিং সিস্টেম তৈরি করতে ব্যবহৃত হয়। XADD, XREAD, এবং XGROUP কমান্ডগুলি এই স্ট্রিম ডেটা পরিচালনা করতে সহায়ক এবং খুবই কার্যকরী।

Content added By

Redis Streams এর মাধ্যমে Data Processing

121
121

Redis Streams হল Redis-এর একটি শক্তিশালী ডেটা স্ট্রাকচার যা message queueing, event streaming, এবং data processing এর জন্য ব্যবহৃত হয়। Redis Streams-এর মাধ্যমে আপনি একটি stream তৈরি করতে পারেন, যেখানে বিভিন্ন producers (পাবলিশার্স) ডেটা পাবলিশ করে এবং consumers (সাবস্ক্রাইবাররা) সেই ডেটা প্রসেস করে। Redis Streams খুব কার্যকরী হতে পারে যখন আপনি রিয়েল-টাইম ডেটা প্রসেসিং, অ্যাসিঙ্ক্রোনাস মেসেজিং বা লগিং সিস্টেম তৈরি করতে চান।


Redis Streams-এর ধারণা

Redis Streams একটি log-based data structure যা একটি ordered sequence of messages বা events ধারণ করে। প্রতিটি message বা event একটি unique ID দিয়ে চিহ্নিত হয়, যা time-based হয় এবং একটি message payload ধারণ করে। Redis Streams-এর মাধ্যমে আপনি একটি Producer-Consumer মডেল তৈরি করতে পারেন যেখানে একাধিক producer এবং consumer অ্যাপ্লিকেশন একযোগে ডেটা প্রক্রিয়া করে।

Redis Streams এর মূল কমান্ডগুলো হলো:

  1. XADD - নতুন একটি entry স্ট্রিমে যোগ করা।
  2. XREAD - স্ট্রিম থেকে ডেটা পড়া।
  3. XGROUP - Consumer group তৈরি করা।
  4. XACK - Consumer group থেকে ডেটা প্রক্রিয়াকরণের পরে ACK (Acknowledgement) করা।
  5. XDEL - স্ট্রিম থেকে ডেটা মুছে ফেলা।

Redis Streams-এর মাধ্যমে Data Processing Example

ধরা যাক, আপনি একটি Producer-Consumer মডেল তৈরি করতে চান যেখানে producer ডেটা পাবলিশ করবে এবং consumer সেই ডেটা প্রসেস করবে। নিচে Redis Streams ব্যবহার করে data processing এর একটি সাধারণ উদাহরণ দেয়া হল।

1. Producer (XADD command)

Producer সাধারণত ডেটা Streams-এ পাঠায়। এটি XADD কমান্ড ব্যবহার করে স্ট্রিমে নতুন entry যোগ করে।

Producer কোড (Python Example)
import redis

# Redis সার্ভারে কানেক্ট করা
r = redis.Redis(host='localhost', port=6379, db=0)

# নতুন ডেটা Streams-এ যোগ করা
stream_name = 'mystream'
message_id = r.xadd(stream_name, {'event': 'user_created', 'user_id': '1234', 'name': 'John Doe'})

print(f"Message added with ID: {message_id}")
  • XADD কমান্ডে, stream_name এর মধ্যে নতুন event পাঠানো হয়, যা একটি key-value পেয়ার হিসেবে থাকে।
  • এখানে event, user_id এবং name প্যারামিটার পাঠানো হচ্ছে।

2. Consumer (XREAD command)

Consumer XREAD কমান্ড ব্যবহার করে স্ট্রিম থেকে ডেটা পড়ে এবং প্রক্রিয়াকরণ করে। এটি XREAD এর মাধ্যমে নতুন ডেটা পাওয়া গেলে তা প্রসেস করে।

Basic Consumer Example (Python)
import redis

# Redis সার্ভারে কানেক্ট করা
r = redis.Redis(host='localhost', port=6379, db=0)

# স্ট্রিম থেকে ডেটা পড়া
stream_name = 'mystream'

while True:
    # নতুন ডেটা আসলে XREAD কমান্ড ব্যবহার করে পড়া
    messages = r.xread({stream_name: '0'}, count=1, block=0)
    for message in messages:
        message_id, message_data = message
        print(f"New message from {stream_name}: {message_data}")
        
        # এখানে ডেটা প্রসেস করতে পারেন
        user_id = message_data.get(b'user_id').decode('utf-8')
        name = message_data.get(b'name').decode('utf-8')
        print(f"Processing user: {user_id}, Name: {name}")
        
        # Acknowledge message after processing
        r.xack(stream_name, 'mygroup', message_id)
  • XREAD কমান্ডের মাধ্যমে consumer স্ট্রিম থেকে ডেটা পড়বে।
  • block=0 ব্যবহার করে লম্বা সময় ধরে ডেটা রিড করা যাবে।
  • xack কমান্ডের মাধ্যমে, ডেটা প্রসেস করার পরে consumer তা ack করে দেয়, যাতে consumer group পরবর্তী বার্তা গ্রহণ করতে পারে।

3. Consumer Group (XGROUP command)

Redis Streams-এ Consumer Groups ব্যবহৃত হয়, যেখানে একাধিক consumer একসাথে স্ট্রিমের ডেটা প্রক্রিয়া করতে পারে। এটি workload distribution এবং fault tolerance নিশ্চিত করে।

Consumer Group তৈরি করা:
r.xgroup_create('mystream', 'mygroup', id='0', make_stream=True)
  • এখানে mystream স্ট্রিমের জন্য mygroup নামে একটি consumer group তৈরি করা হয়েছে।
  • id='0' দ্বারা বলা হচ্ছে যে গ্রুপটি সমস্ত স্ট্রিম ডেটা শুরু থেকে গ্রহণ করবে।
  • make_stream=True মানে, যদি স্ট্রিমটি আগে থেকে না থাকে, তবে এটি তৈরি করা হবে।
Consumer Group থেকে ডেটা পড়া:
while True:
    # গ্রুপের মাধ্যমে ডেটা রিড করা
    messages = r.xreadgroup('mygroup', 'consumer1', {stream_name: '>'}, count=1, block=0)
    for message in messages:
        message_id, message_data = message
        print(f"New message: {message_data}")
        
        # এখানে ডেটা প্রসেস করতে পারেন
        user_id = message_data.get(b'user_id').decode('utf-8')
        name = message_data.get(b'name').decode('utf-8')
        print(f"Processing user: {user_id}, Name: {name}")
        
        # Acknowledge message after processing
        r.xack(stream_name, 'mygroup', message_id)
  • XREADGROUP কমান্ডের মাধ্যমে consumer group ব্যবহার করে ডেটা পড়া হয়।
  • '>' এর মাধ্যমে এটি নতুন ডেটা গ্রহণ করে, এবং প্রতিটি message প্রক্রিয়া করার পরে XACK কমান্ড ব্যবহার করে তা ack করা হয়।

4. Handling Stream Messages Efficiently

Stream Trim (Xtrim):

স্ট্রিমের আকার বড় হতে পারে, তাই আপনি পুরনো ডেটা মুছে ফেলতে XTRIM ব্যবহার করতে পারেন।

r.xtrim('mystream', minid='1000', approximate=False)

এটি mystream স্ট্রিম থেকে 1000 এর চেয়ে পুরনো ডেটা মুছে ফেলবে।


5. Stream Processing with Batching

স্ট্রিমের ডেটা ব্যাচ আকারে প্রক্রিয়া করতে পারেন। এতে একাধিক ডেটা একত্রে প্রসেস করা হয় এবং তা performance ভালো হতে পারে।

messages = r.xread({stream_name: '0'}, count=10, block=0)
for message in messages:
    # এখানে ব্যাচ প্রসেসিং করা হবে
    print(message)

Conclusion

Redis Streams একটি শক্তিশালী ডেটা স্ট্রাকচার যা মেসেজ কিউইং এবং রিয়েল-টাইম ডেটা প্রসেসিংয়ে ব্যবহৃত হয়। আপনি Producer-Consumer মডেল ব্যবহার করে স্ট্রিমের মাধ্যমে ডেটা পাঠাতে এবং গ্রহণ করতে পারেন। Consumer Groups ব্যবহার করলে একাধিক consumer একই স্ট্রিম থেকে ডেটা প্রসেস করতে পারে, যা কার্যকারিতা বৃদ্ধি এবং ফেইলওভার সুবিধা দেয়। Redis Streams পারফরম্যান্স অপটিমাইজেশন এবং ডেটা ম্যানিপুলেশন নিশ্চিত করার জন্য বিভিন্ন কৌশল ব্যবহার করা যায়, যেমন batch processing, stream trimming, এবং XACK.

Content added By

Streams এবং Pub/Sub এর পার্থক্য

123
123

Redis Streams এবং Pub/Sub (Publish/Subscribe) দুটি messaging প্যাটার্ন হলেও, এদের মধ্যে বেশ কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে। এই দুইটি মডেল রেডিসে মেসেজিং, ডেটা ফ্লো এবং কমিউনিকেশন ব্যবস্থার জন্য ব্যবহৃত হয়, তবে তাদের উদ্দেশ্য, কার্যকারিতা এবং ব্যবহার ক্ষেত্র ভিন্ন। নিচে বিস্তারিতভাবে Streams এবং Pub/Sub এর পার্থক্য তুলে ধরা হলো:


1. Purpose (উদ্দেশ্য)

  • Pub/Sub (Publish/Subscribe):
    • Pub/Sub মডেল মূলত রিয়েল-টাইম কমিউনিকেশনের জন্য ব্যবহৃত হয়। এতে পUBLISHER একটি মেসেজ পাঠায় এবং এক বা একাধিক subscriber সেই মেসেজ গ্রহণ করে।
    • এটি সাধারণত one-time messaging সিস্টেম হিসেবে কাজ করে, যেখানে একটি মেসেজ একাধিক সাবস্ক্রাইবারে পৌঁছায়, এবং প্রত্যেক সাবস্ক্রাইবার একবার মেসেজ পায়।
    • এটি ডেটা ইভেন্টে ভিত্তি করে কাজ করে, এবং সাবস্ক্রাইবাররা যখন মেসেজের জন্য প্রস্তুত থাকে তখনই তারা সেগুলি গ্রহণ করতে পারে।
  • Streams:
    • Redis Streams হল একটি log-like ডেটা স্ট্রাকচার যা message queues এবং event sourcing এর জন্য ব্যবহৃত হয়।
    • Streams মডেলটি persistent data এবং ordering সহ ডেটা স্টোরেজ ও ট্রান্সমিশন পরিষেবা প্রদান করে।
    • Streams সিস্টেমে মেসেজগুলি durable হয় (যেগুলি ক্র্যাশ বা সার্ভার রিস্টার্টের পরও পুনরুদ্ধার করা যায়), এবং স্ট্রিমের প্রতিটি মেসেজ unique থাকে এবং সে অনুযায়ী ordering থাকে।

2. Message Handling (মেসেজ হ্যান্ডলিং)

  • Pub/Sub:
    • Pub/Sub প্যাটার্নে, পUBLISHER যে মেসেজটি পাঠায় তা কেবলমাত্র live সাবস্ক্রাইবারদের কাছে পৌঁছায়। যদি কোনো সাবস্ক্রাইবার মেসেজ পেতে প্রস্তুত না থাকে, তবে সেই মেসেজটি হারিয়ে যায় (no message persistence).
    • সাবস্ক্রাইবার একবার মেসেজ গ্রহণ করলে, তার পর সেই মেসেজ পুনরুদ্ধার করা সম্ভব নয়।
  • Streams:
    • Streams মডেলে, মেসেজগুলি স্ট্রিমে সংরক্ষিত হয়, এবং multiple subscribers বা consumers সেই মেসেজগুলো ধাপে ধাপে গ্রহণ করতে পারে।
    • এই মডেলটি message durability নিশ্চিত করে, অর্থাৎ একবার মেসেজ স্ট্রিমে আসলে, তা persist হয়ে থাকে এবং ক্র্যাশ বা অন্যান্য সমস্যা হলেও মেসেজ পুনরুদ্ধার করা সম্ভব হয়।
    • Streams এ আপনি মেসেজগুলির ordering এবং acknowledgment (যেমন, মেসেজ সফলভাবে গ্রহণ হয়েছে কিনা তা জানানো) চেক করতে পারেন।

3. Message Persistence (মেসেজ পার্সিস্টেন্স)

  • Pub/Sub:
    • Pub/Sub-এ মেসেজ পার্সিস্টেন্ট হয় না। একবার মেসেজ পUBLISH করার পর, এটি সর্বোচ্চ একবার সাবস্ক্রাইবারদের কাছে পৌঁছায় এবং যদি কোনো সাবস্ক্রাইবার তখন উপস্থিত না থাকে, সেই মেসেজ হারিয়ে যায়।
    • এটি non-durable এবং fire-and-forget মেসেজিং মডেল।
  • Streams:
    • Streams মডেলে মেসেজ পার্সিস্টেন্ট হয় এবং logs হিসেবে স্টোর হয়। একবার মেসেজ স্ট্রিমে যুক্ত হলে, এটি permanent হয়ে থাকে যতক্ষণ না আপনি তা সরিয়ে দেন বা expire হয়।
    • এটি durable এবং reliable মেসেজিং সিস্টেম, যা সিস্টেমের ক্র্যাশ বা অন্যান্য সমস্যা থেকে সুরক্ষিত।

4. Ordering (অর্ডারিং)

  • Pub/Sub:
    • Pub/Sub মডেলে মেসেজগুলি কোন নির্দিষ্ট অর্ডারে পৌঁছায় না। অর্থাৎ, আপনি নিশ্চিত হতে পারবেন না যে মেসেজগুলো সাবস্ক্রাইবারে ঠিক কোন অর্ডারে যাবে, বা একই সাবস্ক্রাইবার একাধিক বার মেসেজ পাবে না।
    • No guaranteed ordering between subscribers.
  • Streams:
    • Streams মডেলে মেসেজের অর্ডার নিশ্চিত করা হয়। মেসেজগুলি স্ট্রিমে নির্দিষ্ট অর্ডারে সংরক্ষিত হয় এবং সাবস্ক্রাইবার বা কনজিউমাররা সেই অর্ডারে মেসেজগুলো পেয়ে থাকে।
    • Guaranteed ordering of messages in a stream.

5. Use Cases (ব্যবহার ক্ষেত্র)

  • Pub/Sub:
    • Real-time notifications: চ্যাট সিস্টেম, লাইভ ফিড, ট্রেডিং সিস্টেম ইত্যাদিতে এটি ব্যবহার করা হয় যেখানে রিয়েল-টাইম ইভেন্ট ট্র্যাকিং গুরুত্বপূর্ণ।
    • Live updates: যেমন স্কোর আপডেট, নিউজ ফিড, স্টক মার্কেট আপডেট।
    • Event broadcasting: একাধিক সিস্টেমের মধ্যে ইভেন্ট ব্রডকাস্ট করতে।
  • Streams:
    • Event sourcing: যেখানে ইভেন্টগুলির একটি ধারাবাহিক ইতিহাস রাখা দরকার, যেমন ফিনান্সিয়াল ট্রানজ্যাকশন বা লোগিং।
    • Message queues: কাজের সারি বা টাস্কের তালিকা পরিচালনা করতে ব্যবহার করা হয়, যেখানে সিস্টেমগুলো asynchronous কাজ করতে পারে।
    • Data pipeline: ডেটা সংগ্রহ এবং প্রসেসিং সিস্টেমে ব্যবহৃত হয়, যেখানে ডেটার অর্ডার এবং পুনঃপ্রক্রিয়াকরণ প্রয়োজন।

6. Scalability (স্কেলেবিলিটি)

  • Pub/Sub:
    • Pub/Sub সিস্টেমটি স্কেল করতে কিছুটা চ্যালেঞ্জ হতে পারে, কারণ একাধিক সাবস্ক্রাইবারের মধ্যে একই মেসেজ ব্রডকাস্ট করা হয় এবং বিভিন্ন নোডে ট্র্যাফিক পরিচালনা করতে Redis Cluster বা Sharding কনফিগারেশন প্রয়োজন হতে পারে।
    • এটি horizontal scaling-এ চ্যালেঞ্জ থাকতে পারে যদি অনেক সাবস্ক্রাইবার থাকে।
  • Streams:
    • Redis Streams স্কেলেবল এবং horizontal scaling সমর্থন করে, কারণ এটি consumer groups ব্যবস্থাপনা এবং message acknowledgment সিস্টেমে কাজ করতে সক্ষম। এভাবে একটি স্ট্রিমের মেসেজ অনেক কনজিউমার দ্বারা প্রক্রিয়া করা যেতে পারে।
    • এটি অনেক সাবস্ক্রাইবার এবং ডেটা প্রসেসিংয়ের জন্য আরও উপযোগী।

7. Acknowledgment (একনজলেজমেন্ট)

  • Pub/Sub:
    • Pub/Sub মডেলে সাবস্ক্রাইবাররা মেসেজ গ্রহণের পর কোনো acknowledgment বা নিশ্চিতকরণ প্রদান করে না। এটি শুধুমাত্র মেসেজ পUBLISH করার সময় পনির্ভর।
  • Streams:
    • Streams মডেলে message acknowledgment থাকে। অর্থাৎ, যখন কোন কনজিউমার একটি মেসেজ গ্রহণ করে, তখন সিস্টেম সেই মেসেজকে acknowledge করে দেয়, যাতে সঠিকভাবে মেসেজ প্রসেস হয়েছে তা নিশ্চিত করা যায়।

সারাংশ

FeaturePub/SubStreams
PurposeReal-time messaging & notificationsEvent sourcing & message queues
Message PersistenceNo persistence (messages are lost)Persistent messages (log-based)
Message OrderingNo guaranteed orderingGuaranteed ordering
AcknowledgmentNo message acknowledgmentMessage acknowledgment supported
Use CasesChat, notifications, live updatesEvent sourcing, message queues, logs
ScalabilityLimited, can be challengingHighly scalable with consumer groups
ReliabilityLow, messages may be missedHigh, reliable with message persistence
  • Pub/Sub হল দ্রুত, রিয়েল-টাইম মেসেজিং ব্যবস্থার জন্য, যেখানে মেসেজগুলো একবারেই সব সাবস্ক্রাইবারে চলে যায়।
  • Streams হল শক্তিশালী, ডিউরেবল এবং অর্ডারড মেসেজিং সিস্টেম, যেখানে মেসেজগুলো পরবর্তী প্রসেসিং বা কনজিউম করার জন্য নিরাপদে সংরক্ষিত হয়।

আপনার অ্যাপ্লিকেশনের প্রয়োজন অনুসারে এই দুটি পদ্ধতির মধ্যে সঠিকটি বেছে নিন।

Content added By
Promotion